/*
 * Lista.h
 *
 *  Created on: 08/11/2013
 *      Author: Miguel
 */

#ifndef LISTA_H_
#define LISTA_H_

#include "../Types.h"
#include "Lista.h"
#include "../ISerializable.h"
#include "../IEvaluator.h"
#include "OcurrenciaDeTerminos.h"

class Lista;

class porId : public IEvaluator<Lista> {
	private:
		BigInt idTerm;
		friend class Lista;
	public:
		virtual ~porId() {};
		int eval(const Lista& unaLista) const;
};

class Lista : public ISerializable{
public:
	Lista();
	virtual ~Lista();

	static const porId& ById(BigInt id);

	void limpiar();
	void crearConDoc(IDs id);
	void agregarDoc(IDs idDoc);

	BigInt getIdTerm() const;
	void imprimir();
	void interseccion(Lista otra, Lista& interseccion);
	void copiarDocumentos(std::vector<int>& docs);

	Lista& operator=(const Lista otra);
	BigInt size() const;
	void serialize(ISerializer& serializer) const;
	void unserialize(IUnserializer& unserializer);
	// LISTA DE DOCS, que se guardara en el documento LISTAS<nombre>.dat
private:
	static porId evalPorId;

	BigInt idTerm;
	BigInt cantidadDeDocs;
	BigIntVector docs;
	BigIntVector frecuencias;

};

#endif /* LISTA_H_ */
